﻿#include<iostream>
using namespace std;

//class A
//{
//public:
//	A(int a, int b)
//		:_a(a)
//		,_b(b)
//	{
//
//	}
//private:
//	int _a;
//	int _b;
//};
//int main()
//{
//	A* a = new A[3]{ {1, 2}, {2, 1}, {3, 1} };
//	delete[] a;
//	return 0;
//}


//class Test
//{
//	int _year = 2022;//缺省值 -- 默认构造函数用的(后面会讲)
//public:
//	void GetYear() const
//	{
//		cout << _year << endl;
//	}
//};
//
//int main()
//{
//	const Test t;
//	t.GetYear();
//	return 0;
//}

//class Test1
//{
//public:
//	Test1()
//	{
//		cout << "Test1()" << endl;
//	}
//};
//
//class Test2
//{
//public:
//	Test2()
//	{
//
//	}
//private:
//	Test1 t1;
//};
//
//int main()
//{
//	Test2 t;
//	return 0;
//}

//class A
//{
//public:
//	~A()
//	{
//		cout << "A" << endl;
//	}
//};
//class B
//{
//public:
//	~B()
//	{
//		cout << "B" << endl;
//	}
//};
//class C
//{
//public:
//	~C()
//	{
//		cout << "C" << endl;
//	}
//};
//class D
//{
//public:
//	~D()
//	{
//		cout << "D" << endl;
//	}
//};
//
//C c;
//int main()
//{
//	A* pa = new A();
//	B b;
//	static D d;
//	delete pa;
//	return 0;
//}


//int main()
//{
//	int* a = new int[10];
//	delete a;
//	return 0;
//}

//class A
//{
//public:
//	A()
//	{
//		cout << ++_a << endl;
//	}
//	~A()
//	{
//		cout << ++_b << endl;
//	}
//private:
//	static int _a;
//	static int _b;
//};
//int A::_a = 0;
//int A::_b = 0;
//int main()
//{
//	A* a = new A[10];
//	delete[] a;
//	return 0;
//}

//int main()
//{
//	int n = 0;
//	int g = 5, m = 3;
//	double x = 1.0 / 3;
//	for (int i = 1; i < 100 / g; i++ )
//	{
//		for (int j = 1; j < 100 / m; j++)
//			for(int z = 1;z < 100 ;z++)
//				if (i * g + j * m + z * x == 100)
//				{
//					n++;
//					cout << "公鸡" << i << endl;
//					cout << "母鸡" << j << endl;
//					cout << "小鸡" << z << endl;
//					cout << "------------" << endl;
//				}
//	}
//	printf("总共%d个数据\n", n);
//	return 0;
//}



class Date
{
public:
	Date(int year = 2003, int month = 7, int day = 9)//全缺省
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//拷贝构造函数
	Date(const Date& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
		cout << "Date()拷贝构造" << endl;
	}
	void Printf()
	{
		cout << _year << '/' << _month << '/' << _day << endl;
	}
	//运算符重载：
	//Date operator=(const Date& d)//权限的缩小
	Date& operator=(const Date& d)//权限的缩小
	{
		//防止相同的重复赋值：
		if (this != &d)//利用地址进行比较 &也是默认重载
		{
			_year = d._year;
			_month = d._month;
			_day = d._day;
		}
		return *this;
	}

private:
	Date* operator&()
	{
		return this;
	}
	int _year;
	int _month;
	int _day;
};

int main()
{
	//Date a;
	//Date b(2022, 8, 6);
	//b.Printf();
	//a.Printf();
	////const Date& c = b = a;
	//b = a;
	//b.Printf();
	Date a;
	Date* b = &a;
	b->Printf();
	return 0;
}